home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / pc_board / pcbcht10.zip / PCBCHAT.PAS < prev   
Pascal/Delphi Source File  |  1991-10-22  |  6KB  |  160 lines

  1. (*  PCBChat: Set the caller's Node Chat Status to either 'A'vailable or  *)
  2. (*           'U'navailable, as desired by sysop.  Designed to be run in  *)
  3. (*           the $$LOGON.BAT file of PCBoard 14.5a                       *)
  4. (*  Written in Turbo Pascal 6.0 by Lance Williams, 10/22/91              *)
  5. (*                                                                       *)
  6. (*  This source code and program is donated to the public domain for     *)
  7. (*  instructive purposes.  You are free to use any part of the code in   *)
  8. (*  any of your porgrams, as long as you give me some credit.            *)
  9. (*                                                                       *)
  10. (*  This program makes use of the MdosIO Unit from SAM SMITH, available  *)
  11. (*  in the PROKIT or TOOLS libraries on THE TOOL SHOP, his BBS           *)
  12.  
  13. program secfiles;
  14.  
  15. {$M 2048, 4096, 4096}
  16.  
  17. uses dos, MdosIO;
  18.  
  19. type
  20.    char2 = array[1..2] of char;
  21.    char4 = array[1..4] of char;
  22.    char5 = array[1..5] of char;
  23.    char6 = array[1..6] of char;
  24.    char12 = array[1..12] of char;
  25.    char13 = array[1..13] of char;
  26.    char15 = array[1..15] of char;
  27.    char24 = array[1..24] of char;
  28.    char25 = array[1..25] of char;
  29.    char30 = array[1..30] of char;
  30.    bitmap = array[1..5] of char;
  31.  
  32.    {layout of the USERNET.DAT file}
  33.    UserNet_Rec = record
  34.     {1 }Status:   char2;              {Node Number in Chat or Status}
  35.     {3 }NodeNum:  char2;              {Node Number or Blank if Down}
  36.     {5 }Caller:   char25;             {Name of the caller online}
  37.     {30}City:     char24;             {City/State of caller}
  38.     {record size = 53}
  39.    end;
  40.  
  41.    {layout of the PCBOARD.SYS file while doors are open}
  42.    pcb_sys_rec = record
  43.     {1  }display:        char2;       {display on console?  -1 or 0}
  44.     {3  }printer:        char2;       {print log?           -1 or 0}
  45.     {5  }page_bell:      char2;       {bother sysop?        -1 or 0}
  46.     {7  }alarm:          char2;       {caller alarm sound?  -1 or 0}
  47.     {9  }sysop_next:     char;        {force sysop on next? 'N', 'X' or ' '}
  48.     {10 }errcheck:       char2;       {error check/correcting modem? -1 or 0}
  49.     {12 }graphics:       char;        {ansi graphics mode?   'Y','N','7'}
  50.     {13 }nodechat:       char;        {node chat status 'U' or 'A'}
  51.     {14 }openbps:        char5;       {BPS rate to open modem port at}
  52.     {19 }connectbps:     char5;       {BPS connect rate or 'Local'}
  53.     {24 }usernum:        integer;     {record number in user file}
  54.     {26 }firstname:      char15;      {caller's first name}
  55.     {41 }password:       char12;      {caller's password}
  56.     {53 }time_on:        integer;     {when the user logged on in MINUTES}
  57.     {55 }prev_used:      integer;     {minutes used in prev calls today, <0}
  58.     {57 }time_logged:    char5;       {hh:mm time the user logged on}
  59.     {62 }time_limit:     integer;     {maximum minutes allowed from PWRD}
  60.     {64 }down_limit:     integer;     {daily download limit/1024 from PWRD}
  61.     {66 }curconf:        byte;        {active conference when door opened}
  62.     {67 }joined:         bitmap;      {areas user has been in}
  63.     {72 }ydone:          bitmap;      {areas user has done 'Y' on}
  64.     {77 }time_added:     integer;     {highest conference added time in mins}
  65.     {79 }time_credit:    integer;     {upload/chat time credit in minutes}
  66.     {81 }slanguage:      char4;       {language used, blank, .FRE etc}
  67.     {85 }name:           char25;      {caller's full name}
  68.     {110}sminsleft:      integer;     {minutes left when door opened}
  69.     {112}snodenum:       byte;        {current node number}
  70.     {113}seventtime:     char5;       {hh:mm event time}
  71.     {118}seventactive:   char2;       {event time active? "-1" or "0 "}
  72.     {120}sslide:         char2;       {slide event? "-1" or " 0"}
  73.     {122}smemmsg:        single;      {memorized message number}
  74.     {126}scomport:       char;        {com port number '0','1','2'}
  75.     {127}fill99:         char2        {filler UNDOCUMENTED}
  76.     {record size: 128}
  77.    end;
  78.  
  79. var
  80.    pcbsys: pcb_sys_rec;
  81.    pcbsysfile: file of pcb_sys_rec;
  82.    usernet: usernet_rec;
  83.    datfile: text;
  84.    linecnt: integer;
  85.    Usernet_filename: string;
  86.    error_code, nodenum, handle: word;
  87.    setting: string;
  88.  
  89.  
  90. begin
  91.   write('Running PCBChat and setting CHAT status to ',paramstr(1),'.');
  92.   setting := Paramstr(1);
  93.   {Parameter Options:  [A]vailable or [U]navailable}
  94.   write('.');
  95.  
  96.   {Set PCBOARD.SYS file}
  97.   assign(pcbsysfile, 'PCBOARD.SYS');
  98.   reset(pcbsysfile);
  99.   read(pcbsysfile,pcbsys);
  100.   write('.');
  101.  
  102.   {In Pascal, the first record is 0, not 1}
  103.   nodenum := pcbsys.snodenum - 1;
  104.  
  105.   {Get the Location of the USERNET.DAT file}
  106.   assign(datfile, 'PCBOARD.DAT');
  107.   reset(datfile);
  108.   {path/filename of the USERNET.DAT file is on line #41 of PCBOARD.DAT}
  109.   for linecnt := 1 to 41 do
  110.      readln(datfile,usernet_filename);
  111.   close(datfile);
  112.   write('.');
  113.  
  114.   {Set the USERNET.DAT file}
  115.   {Uses MdosIO unit form Sam Smith for Shared File access}
  116.   handle := dos_open(usernet_filename,open_update);
  117.   dos_rseek(handle,nodenum,53,seek_start);
  118.   error_code := dos_read(handle,usernet,53);
  119.   write('.');
  120.  
  121.   {Set all the Files for Chat Status Settings}
  122.   {Uses complete checking, to weed out improper command line parameters}
  123.   if upcase(setting[1]) = 'A' then
  124.   begin
  125.      pcbsys.nodechat := 'A';
  126.      usernet.status := 'A ';
  127.   end
  128.   else if upcase(setting[1]) = 'U' then
  129.   begin
  130.      pcbsys.nodechat := 'U';
  131.      usernet.status := 'U ';
  132.   end
  133.   else
  134.   begin
  135.     {Display Error Message}
  136.     writeln;
  137.     writeln('Bad Parameter Passed.....');
  138.     writeln;
  139.     writeln('Program Exit Code = 1');
  140.     {Close open files}
  141.     close(pcbsysfile);
  142.     dos_close(handle);
  143.     {Halt program with errorlevel = 1}
  144.     halt(1);
  145.   end;
  146.   write('.');
  147.  
  148.   {Write the new PCBOARD.SYS file}
  149.   seek(pcbsysfile,0);   {Reset PCBOARD.SYS to top of file}
  150.   write(pcbsysfile, pcbsys);
  151.   close(pcbsysfile);
  152.   write('.');
  153.  
  154.   {Use MdosIO to write the new record in the USERNET.DAT file}
  155.   dos_rseek(Handle,nodenum,53,seek_Start);
  156.   dos_write(handle,usernet,53);
  157.   dos_close(handle);
  158.   writeln('.Done');
  159. end.
  160.